"""
字典

Version: 0.1
Author: yuwl
Date：2024-1-1
"""


# 创建字典的字面量语法
scores = {'张三': 95, '李四': 78, '王五': 82}
print(scores) # {'张三': 95, '李四': 78, '王五': 82}
# 创建字典的构造器语法
item1 = dict(one=1, two=2, three=3, four=4)
print(item1) # {'one': 1, 'two': 2, 'three': 3, 'four': 4}
# 通过zip函数将两个序列压成字典
item2 = dict(zip(['a', 'b', 'c'], '123'))
print(item2) # {'a': '1', 'b': '2', 'c': '3'}
# 创建字典的推导式语法
item3 = {num: num ** 2 for num in range(1, 10)}
print(item3) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

# 通过键可以获取字典中对应的值
print(scores['张三'])
# print(scores['赵六']) # KeyError: '赵六'
print(scores.get('赵六')) # None
# 对字典中所有键值对进行遍历
for key in scores:
	print(key, ':', scores[key])
	print(f'{key}: {scores[key]}')
# 更新字典中的元素
scores['李四'] = 65
scores.update(赵六=67, 陆七=87)
print(scores) # {'张三': 95, '李四': 65, '王五': 82, '赵六': 67, '陆七': 87}
if '王八' in scores:
	print(scores['王八'])
print(scores.get('王八')) # None
# get方法也是通过键获取对应的值但是可以设置默认值
print(scores.get('王八', 60))
# 删除字典中的元素
print(scores.popitem()) # ('陆七', 87)
print(scores.popitem()) # ('赵六', 67)
print(scores.pop('张三', 100)) # 95
print(scores) # {'李四': 65, '王五': 82}
# 清空字典
scores.clear()
print(scores) # {}


# 不可变的数据类型作为键
# 使用整数作为键
my_dict = {1: 'value1', 2: 'value2'}

# 使用字符串作为键
my_dict = {'name': 'Alice', 'age': 25}

# 使用元组作为键
my_dict = {(1, 2): 'value1', (3, 4): 'value2'}

# 使用布尔值作为键
my_dict = {True: 'value1', False: 'value2'}
